/*******************************************************************************
* Имя файла: chatServer.h
* Дата: 01-06-2024
* Разработчик: Андрей Подлегаев
* Группа: 315
* Факультет: ЦДО ТУСУР
* Лицензия: BSD
* Описание: Клиент-серверное приложение (ЦДО ТУСУР)
* *****************************************************************************/

#ifndef CHATSERVER_H
#define CHATSERVER_H

#include <vector>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <thread>
#include <mutex>


#include "colorConsole.h"

static const char* IP_ADDRESS = "127.0.0.1";
const int PORT = 1200;

static const int MAX_LEN_MESSAGE = 200;
static const int MAX_LEN_USER_NAME = 200;

/* Структура клиент */
struct chatClient {
	int id;
	std::string name;
	int socket;
	std::thread th;
};

inline std::vector<chatClient> clients;
inline std::mutex coutMutex, clientsMutex;

/* Прототип функции получения цвета для клиента */
Color getColor(const int& id);

/* Прототип функции установки имени клиента */
void setNameClient(const int& id, char name[]);

/* Прототип функции вывода сообщений в терминал */
void printMessages(const std::string& str, Color color = COLOR_LIGHT_GRAY,
		   const bool endMessages = true);

/* Прототип функции отправки широковещательных сообщений */
void broadcastMessage(const std::string& message, const int& idSender);

/* Прототип функции отправки широковещательных сообщений */
void broadcastMessage(const int& number, const int& idSender);

/* Прототип функции закрытия соединений */
void closeConnection(const int& id);

/* Прототип функции обработки клиентских подключений */
void handlerClient(const int& clientSocket, const int& id);


#endif // CHATSERVER_H
